package com.warrior.gatherclient.util;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.springframework.util.StringUtils;

/**
 * @ClassName: JsonUtils
 * @Description: (操作json的工具类)
 * @author xujian
 * @date 2017年12月27日
 */
public class JsonUtil {


	/**
	 * @Title: getInteger
	 * @Description: (从JSONObject中获取指定Integer类型的字符串)
	 * @param @param str
	 * @param @param json
	 * @param @return    参数
	 * @author xujian
	 * @return String    返回类型
	 * @throws
	 */
	public static Integer getInteger(String str, JSONObject json) {
		if (determine(str, json)) {
			return json.getInteger(str);
		}
		return 0;
	}

	/**
	 * @Title: getBoolean
	 * @Description: (从JSONObject中获取指定Boolean类型的字符串)
	 * @param @param str
	 * @param @param json
	 * @param @return    参数
	 * @author xujian
	 * @return String    返回类型
	 * @throws
	 */
	public static Boolean getBoolean(String str, JSONObject json) {
		if (determine(str, json)) {
			return json.getBoolean(str);
		}
		return null;
	}

	/**
	 * @Title: getInteger
	 * @Description: (从JSONObject中获取指定Integer类型的字符串)
	 * @param @param str
	 * @param @param json
	 * @param @return    参数
	 * @author xujian
	 * @return String    返回类型
	 * @throws
	 */
	public static Long getLong(String str, JSONObject json) {
		if (determine(str, json)) {
			return json.getLong(str);
		}
		return 0L;
	}

	/**
	 * @Title: getString  
	 * @Description: (从JSONObject中获取指定String类型的字符串)  
	 * @param @param str
	 * @param @param json
	 * @param @return    参数  
	 * @author xujian
	 * @return String    返回类型  
	 * @throws
	 */
	public static String getString(String str, JSONObject json) {
		if (determine(str, json)) {
			return json.getString(str);
		}
		return "";
	}

	/**
	 * @Title: getJsonArray  
	 * @Description: (从JSONObject中获取指定JSONArray)  
	 * @param @param str
	 * @param @param json
	 * @param @return    参数  
	 * @author xujian
	 * @return JSONArray    返回类型  
	 * @throws
	 */
	public static JSONArray getJsonArray(String str, JSONObject json) {
		if (determine(str, json)) {
			return json.getJSONArray(str);
		}
		return null;
	}

	/**
	 * @Title: getJsonObject  
	 * @Description: (从JSONObject中获取指定JSONObject)  
	 * @param @param str
	 * @param @param json
	 * @param @return    参数  
	 * @author xujian
	 * @return JSONObject    返回类型  
	 * @throws
	 */
	public static JSONObject getJsonObject(String str, JSONObject json) {
		if (determine(str, json)) {
			return json.getJSONObject(str);
		}
		return null;
	}

	/**
	 * @throws Exception 
	 * @Title: getStringObject  
	 * @Description: (获取JsonObject里面data数组中第n个对象的某个key对应的value)  
	 * @param @param str
	 * @param @param json
	 * @param @return    参数  
	 * @author xujian
	 * @return JSONObject    返回类型  
	 * @throws
	 */
	public static String getStringFromArray(String str, JSONObject json, int index) throws Exception {
		if (null != json && json.containsKey("data") && !"null".equalsIgnoreCase(json.getString(str))) {
			JSONArray jsonArray = json.getJSONArray("data");
			if (index + 1 > jsonArray.size()) {
				return "";
			}
			JSONObject jb = (JSONObject) jsonArray.get(index);
			return getString(str, jb);
		}
		return "";
	}

	/**
	 * @Title: determine  
	 * @Description: (一些公共的判断)  
	 * @param @param str
	 * @param @param json
	 * @param @return    参数  
	 * @author xujian
	 * @return Boolean    返回类型  
	 * @throws
	 */
	protected static Boolean determine(String str, JSONObject json) {
		if (null != json && json.containsKey(str) && !"null".equalsIgnoreCase(json.getString(str))
				&& !StringUtils.isEmpty(json.getString(str))) {
			return true;
		} else {
			return false;
		}
	}

}
